package com.kuang.add;

import java.util.concurrent.*;

/**
 * @author luomingliang
 * @date 2021/5/17 19:48
 */
public class CyclicBarrierDemo {
    //CyclicBarrier N个线程互相等待
    public static void main(String[] args) {
        //7个人抢夺商品
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7, ()->{
            System.out.println(Thread.currentThread().getName()+"号买家抢到商品！");
        });

        for (int i = 1; i <= 7; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"号买家准备");
                try {
                    cyclicBarrier.await(); //等待 源码中count减一
                } catch (InterruptedException | BrokenBarrierException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"其他动作");
            }).start();
        }
        //CountDownLatch与CyclicBarrier区别？
        //CountDownLatch达到执行目标线程条件前所有线程可执行其他动作
        //CyclicBarrier达到条件执行目标线程条件后所有线程才可执行其他动作
    }
}
